'''
语法:
    SELECT  函数(常量)  ----
常见函数
    一,单行函数 :
        字符函数:
            length()    长度
            concat()    拼接字符
            upper()     大写
            lower()     小写
            substr()    截取字符串,第一个位置放字符,第二个位置放数字,二代表从第几个字符开始截取,第三个位置放数字,代表截取到第几个,不写默认到最后一个
            instr()     返回字符串第一线出现的索引,找不到返回0
            trim()      去掉字符前后指定的字符串,去空格直接写字符,去指定的字符:('要去的字符' FROM '字符')
            lpad()      用指定的字符实现左填充指定长度  lpad('字符',长度,'填充的字符')
            rpad()      右 同上
            replace()   替换   replace('字符','想换掉的字符','换成后的字符')

        数字函数
            round()     四舍五入  第一是数值,第二个是保留几位
            ceil()      向上取整,返回>=该参数的最小值
            floor()     向下取整,返回<=该参数的最小值
            truncate()  截断
            mod()       取余

        日期函数
            now()       返回当前系统的时间+日期
            curdate()   返回当前的系统日期 不包括时间
            curtime()   返回当前的时间,不包括日期
            STR_TO_DATE()  格式化时间  将日期格式的字符转化成指定格式的日期
                            STR_TO_DATE('9-13-1999','%m-%d-%Y')     输出: 1999-09-13
                    例子: 查询时间为2月3号1998年入职的人
                    SELECT * FROM 表 WHERE 时间字段 = STR_TO_DATE('2-3 1998','%c-%d %Y')
                                                    这里就是表明 %c对应的是什么,%d对应的是什么,%Y对应的是社么,数据库才会对应的处理
            date_format()   将日期转化成字符
                            date_format('2018/6/6','%Y年%m月%d日')     输出: 2018年06月06日
            日期求差:
                    DATADIFF(X,Y)    Y-X


    二,分组函数 :
        功能:用作统计使用,又称为聚合函数
        sum()           求和
        avg()           平均值
        max()           最大
        mim()           最小
        count()         计算个数
        1.前两个一般处理数据型,后三个可以处理任何类型
        2.以上分组函数都忽略 null 值
        3.可以和distinct()搭配
        4.count() 函数
            SELECT COUNT(字段) FROM 表;    统计有几个工资.可能有 null 值
            SELECT COUNT(*) FROM 表;     统计行数
            SELECT COUNT(*) FROM 表;     同上
        5.和分组函数一同查询的字段要求是 group by 后的字段
            SELECT AVG(字段),工资 FROM 表
                这是不行的,因为AVG只有一个返回值,而工资有一列的返回值,返回的表格不对

    三,case函数
        语法一:
            select  列表 ,
            case    需要判断的字段或者表达式
            when    常量1 then 要显示的值1 或者 语句1
            when    常量2 then 要显示的值2 或者 语句2
            when    常量3 then 要显示的值3 或者 语句3
            ---
            else    要显示的 值n 或 语句n
            end as  取名
            FROM    表
                                                    案例 1

        语法二:
            select  列表 ,
            case
            when    条件1 then 要显示的值1或者语句1
            when    条件1 then 要显示的值1或者语句1
            when    条件1 then 要显示的值1或者语句1
            ---
            else    要显示的 值n 或 语句n   其他的值干嘛干嘛
            end as  取名
            FROM    表
                                                    案例 2
'''

# import pymysql
# conn = pymysql.connect(
#     host='localhost',
#     user='root',
#     passwd='123456',
#     db='db_library',
#     port=3306,
#     charset='utf8'
# )
# cur = conn.cursor()

'''
案例1 :查询员工的工资,要求
    部门号=10,显示的工资为1.1倍
    部门号=20,显示的工资为1.1倍
    部门号=30,显示的工资为1.1倍
'''
# w = "SELECT salary AS '原始工资',id," \
#     " CASE id " \
#     "WHEN 10 THEN salary*1.1 " \
#     "WHEN 20 THEN salary*1.2 " \
#     "WHEN 30 THEN salary*1.3 " \
#     "WHEN 40 THEN salary*1.4 " \
#     "WHEN 50 THEN salary*1.5 " \
#     "ELSE salary " \
#     "END AS '新工资' " \
#     "FROM test"
# cur.execute(w)
# ret = cur.fetchall()
# conn.commit()
# print(ret)


'''
案例2 : 查询员工的工资情况
        如果工资>700,显示为A
        如果工资>500,显示为B
        如果工资>300,显示为C
        其他的显示为D
'''
w = "SELECT salary,name, " \
    "CASE " \
    "WHEN salary>700 THEN 'A' " \
    "WHEN salary>500 THEN 'B' " \
    "WHEN salary>300 THEN 'C' " \
    "ELSE 'D' " \
    "END AS '等级' " \
    "FROM test"
cur.execute(w)
ret = cur.fetchall()
conn.commit()
print(ret)





















